# 多阶段构建：构建阶段
# 使用与最终运行时相同的基础镜像，方便调试，但逻辑上分离
FROM openeuler/openeuler:25.03 AS builder

# --- 系统包安装与清理 ---
# 优化点 1: 合并所有 dnf 操作到单个 RUN 指令，减少层数并利用缓存
# 优化点 2: 统一使用 dnf，并让 dnf 自动处理依赖，而非手动罗列
# 优化点 3: 明确指定字体包，确保 LibreOffice 中文显示正常
RUN dnf update -y && \
    dnf install -y dnf-utils && \
    dnf install -y \
        # LibreOffice 核心及常用字体
        libreoffice \
        fontconfig \
        dejavu-sans-fonts \
        wqy-zenhei-fonts && \
    # 在同一层内清理缓存，确保镜像体积最小
    dnf clean all && \
    rm -rf /var/cache/dnf

# --- JDK 安装与配置 ---
# 优化点 4: 使用 COPY 替代 ADD，语义更清晰（如果JDK是本地文件）
# 如果 JDK_URL 是一个远程链接，ADD 更方便，但使用 curl+tar 更可控
# 指定构建参数（默认值可改）
ARG JDK_FILE=openjdk-17.0.2_linux-aarch64_bin.tar.gz

# 1. 把宿主机上的 JDK 包拷进镜像（https://mirrors.huaweicloud.com/openjdk/17.0.2/openjdk-17.0.2_linux-x64_bin.tar.gz）

COPY ${JDK_FILE} /tmp/jdk.tgz

# 2. 解压、软链、清理、验证一步完成
RUN mkdir -p /usr/local/java && \
    tar -xzf /tmp/jdk.tgz -C /usr/local/java && \
    ln -snf /usr/local/java/jdk-* /usr/local/java/jdk-17 && \
    # 删除非必要文件
    rm -rf /usr/local/java/jdk-*/src.zip \
           /usr/local/java/jdk-*/lib/src.zip \
           /usr/local/java/jdk-*/include \
           /usr/local/java/jdk-*/man && \
    # 删除拷贝进来的压缩包，减少体积
    rm -f /tmp/jdk.tgz && \
    # 验证
    /usr/local/java/jdk-17/bin/java -version

ENV JAVA_HOME=/usr/local/java/jdk-17
ENV PATH=$PATH:$JAVA_HOME/bin

# --- 运行阶段 ---
# 从 builder 阶段复制已安装的软件
FROM openeuler/openeuler:25.03

LABEL maintainer="dev@example.com" \
      description="Optimized JDK 17 & LibreOffice runtime on openEuler 25.03"

# 优化点 5: 从 builder 阶段复制安装好的文件，而不是在运行时镜像中重复安装
COPY --from=builder /usr/lib64 /usr/lib64
COPY --from=builder /usr/libexec /usr/libexec
COPY --from=builder /usr/bin /usr/bin
COPY --from=builder /usr/share /usr/share
COPY --from=builder /etc /etc
COPY --from=builder /usr/local/java /usr/local/java

# 设置环境变量
ENV JAVA_HOME=/usr/local/java/jdk-17
ENV PATH=$PATH:$JAVA_HOME/bin

# 设置工作目录
WORKDIR /app

# 优化点 6: 提供一个默认的 CMD，方便调试和交互
# 如果不需要，可以设置为 `ENTRYPOINT []` 或 `CMD ["/bin/bash"]`
CMD ["/bin/bash"]
